极大似然估计 (MLE) 及 Stata 实现
作者:郭李鹏
Stata 连享会:知乎 | 简书 | 码云 | CSDN
2019暑期Stata现场班 (连玉君+刘瑞明主讲)
特别说明
文中包含的链接在微信中无法生效。请点击本文底部左下角的【阅读原文】
,转入本文【简书版】
。
MLE 简介
最大似然估计 ( MLE ) 在计量经济学中有广泛的应用。本文主要介绍 MLE 的基本原理和应用,并演示如何在 Stata 软件中进行最大似然估计。
MLE 的基本原理
计量经济学中, 最小二乘估计、最大似然估计和广义矩估计是构造统计量的三种基本方法。
最小二乘估计,最合理的参数估计量应该使得模型能最好地拟合样本数据,也就是估计值和观测值之差的平方和最小。
矩估计的基本思想是,简单随机样本的原点矩依概率收敛到相应的总体原点矩,用样本矩替换总体矩,进而找出未知参数的估计。
最大似然估计,最合理的参数估计量应该使得从模型中抽取该 n 组样本观测值的概率最大,也就是概率分布函数或者说是似然函数最大。
最小二乘估计和广义矩估计进行统计推断时并不需要设定密度函数,即无需对干扰项分布进行假设;而最大似然估计的前提条件是,能够写出密度函数的完整设定,其中包含一系列待估参数。
概似函数
假设针对一个包含
其中
对数似然函数
对于分布独立的样本
根据最大似然估计的原理,我们可以通过极大化对数似然函数获得未知参数
MLE 的基本步骤
在 Stata 中进行最大似然估计的基本步骤如下:
推导最大似然函数
编写似然函数的 Stata 程序
设定解释变量和被解释变量,完整设定
ml model
命令估计最大似然函数:执行
ml maximize
命令
何时使用 MLE ?
MLE 的主要运用在离散数据模型和一些分布比较复杂的模型,主要有:Logit 模型,Probit 模型,泊松模型,负二项模型,非似然函数模型以及随机边界模型等。
MLE 的 Stata 实现
范例1:线性回归模型的 MLE 估计
对于线性回归模型,若假设其满足所有基本假设条件,且干扰项服从正态分布,y 服从均值为
矩阵形式为:
我们可以通过 MLE 获得该模型中两组参数
在用 Stata 进行似然估计前,需要先写出对数似然函数基本设定形式:
在 Stata 中执行最大似然估计的第一步是将不包括线性回归函数的似然函数的基本设定编写为 ado 文件,需要注意的是,程序中只定义概似函数的基本设定,如何将线性回归函数加入模型由其他管道设定。
cap program drop mymean_lf
program define mymean_lf
version 9.1
args lnf mu sigma
quietly replace `lnf' = ln(normalden(($ML_y1 - `mu')/`sigma')) - ln(`sigma')
end
程序的第一行用于定义程序的名称,对应最后一行的end 语句,表明程序到此结束。
程序中 version 语句声明编写程序时 Stata 版本,以便更高版本能够兼容运行该程序。
程序的第三行用于声明输入项,关键命令是 args
,其后的 lnf
是一个暂元,用于存放每次迭代得到的似然函数值,mu
和 sigma
表明我似然函数中有两个线性等式。
quietly replace
语句中 Stata 对每一个观察值求得似然函数值后会按观察值的顺序依次累加后存入暂元 lnf
中。
ML_y1
为默认写法,表示被解释变量,是 Stata 指定的一个全局暂元。如果模型中包含多个被解释变量, Stata 会自动将它们依次存放于 ML_y2
、 ML_y3
… ML_yj
中。
上述程序在保存时的文件名一定要为 mymean_lf(与我们所定义的程序名称保持一致),保存类型为 ado 文档。
上面的程序只是定义了最大似然估计的“基本架构”,而要实现对具体模型的估计还需要通过“输入项”的设定来定义最大似然估计的“完整架构”。进行程序完整架构定义的指令结构如下:
ml model lf [d0|d1|d2] progname (eq1: y = x1 x2 …) (eq2: x3 x4) (eq3:) ()
ml
方法的关键命令是 ml model
命令和 ml maximize
命令,ml model
命令用来定义需要拟合的模型, ml maximize
命令用来执行最大化。
Stata 对最大似然估计法的执行提供了四种不同的架构, lf
是最常用的架构,通常对样本满足独立同分布的条件时均可使用。在括号中,等号左边为被解释变量,等号右边为解释变量;冒号表示参数名称。
由于 Stata 进行最大似然估计使用的是数值算法,初始值的设定非常重要。我们可以使用如下命令让 Stata 找到进行最大似然估计的初始值。
我们调入汽车价格的数据,演示 Stata 中如何执行 MLE 估计。
sysuse auto, clear
ml model lf mymean_lf (price=mpg wei len) (sigma: )
ml search
ml maximize
est store mle_reg
MLE 线性回归模型与 OLS 结果对比。
reg price mpg wei len
est store ols_reg
esttab mle_reg ols_reg, mtitle(mle_reg ols_reg)
运算结果如下:
--------------------------------------------
(1) (2)
mle_reg ols_reg
--------------------------------------------
main
mpg -86.79 -86.79
(-1.06) (-1.03)
weight 4.365*** 4.365***
(3.84) (3.74)
length -104.9** -104.9*
(-2.71) (-2.64)
_cons 14542.4* 14542.4*
(2.54) (2.47)
--------------------------------------------
sigma
_cons 2348.4***
(12.17)
--------------------------------------------
N 74 74
--------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001
从结果可以看出,采用MLE和OLS估计得到的参数没有明显差别,但是 MLE 估计得到的参数的标准差要比 OLS 估计的小。
范例2:面板随机边界模型的 MLE 估计
面板随机边界模型是一种测算各类效率的参数模型,完美假设下的产出函数为
实际生产中,生产受到各种随机因素的影响,往往还存在效率损失,产出函数为
对产出函数两边取对数,可得
转化为线性计量模型:
令
实证分析中,通常设定:
由于
早期面板随机边界模型分为效率不随时间变化的模型和效率可随时间变化两大类。
无效率成分不随时间改变的模型如下:
其中:
无效率成分随时间改变的模型如下:
文献中常用的假设:
若
真正的固定效应模型,简称 TFE - SFA ( True Fixed Effect SFA)。
早期提出的所谓的面板随机边界模型有很明显的局限性 ——— 在产出边界函数的设定中没有考虑不可观测的个体效应,将公司个体效应归入了非效率项会导致非效率程度估计偏误。为了控制不可观测的个体效应,可以将产出边界函数设定为:
sftfe
及帮助文档。
在 Stata 执行随机边界模型估计主要使用 frontier
和 xtfrontier
命令,外部命令有: sfcross
,sfpanel
,sftfe
,sfkk
,SFA2tier
等。
我们以 Stata 官方自带数据集为例,演示 xtfrontier
命令执行随机边界模型估计:
use http://www.stata-press.com/data/r13/xtfrontier1 ,clear
xtfrontier lnwidgets lnmachines lnworkers, ti
est store xtsfa_ti
xtfrontier lnwidgets lnmachines lnworkers, tvd
est store xtsfa_tvd
esttab xtsfa_ti xtsfa_tvd, mtitle(xtsfa_ti xtsfa_tvd)
* 选项 ti 表示不随时间变化, tvd 表示随时间变化。
估计结果如下:
--------------------------------------------
(1) (2)
xtsfa_ti xtsfa_tvd
--------------------------------------------
lnwidgets
lnmachines 0.290*** 0.291***
(17.69) (17.69)
lnworkers 0.294*** 0.294***
(19.07) (19.06)
_cons 3.031*** 3.029***
(21.03) (21.09)
--------------------------------------------
lnsigma2
_cons 1.422*** 1.411***
(5.32) (5.26)
--------------------------------------------
lgtgamma
_cons 1.139** 1.124**
(3.20) (3.14)
--------------------------------------------
mu
_cons 1.126 1.111
(1.74) (1.72)
--------------------------------------------
eta
_cons 0.00168
(0.39)
--------------------------------------------
N 948 948
--------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001
非线性模型的 MLE 估计
指数分布是典型的非线性分布,常用于连续数据,特别是持续时间数据研究。指数分布的概率密度函数形式如下:
均值为 1
非线性指数模型可以表示如下:
我们通过模拟数据方式演示如何用 MLE 估计非线性模型。
其中:
scalar a = 2
scalar b = -1
scalar mux = 1
scalar sigx = 1
set obs 10000
set seed 2003
gen x = mux + sigx*invnorm(uniform())
gen lamda = exp(a + b*x)
gen Ey = 1/lamda
* To generate exponential with mean mu=Ey use
* Integral 0 to a of (1/mu)exp(-x/mu) dx by change of variables
* = Integral 0 to a/mu of exp(-t)dt
* = incomplete gamma function P(0,a/mu) in the terminology of Stata
gen y = Ey*invgammap(1,uniform())
outfile y x using mma05data.dta, replace
ado 文件基本设定编写如下:
cap program drop mleexp0
program define mleexp0
version 8.0
args lnf theta /* Must use lnf while could use name other than theta */
quietly replace `lnf' = `theta' - $ML_y1*exp(`theta')
end
MLE 估计命令如下:
sysuse mma05data.dta, clear
ml model lf mleexp0 (y = x)
ml search
ml maximize
estimates store rmle
*Obtain robust standard errors
ml model lf mleexp0 (y = x), robust
ml search
ml maximize
estimates store rmlerobust
local mm "rmle rmlerobust"
esttab `mm',mtitle(`mm') compress nogap b(%10.4f) se(%10.4f) t stats(N ll) keep(_cons x)
运算结果如下:
------------------------------------
(1) (2)
rmle rmlerob~t
------------------------------------
eq1
x -1.0192*** -1.0192***
(0.0099) (0.0100)
_cons 2.0076*** 2.0076***
(0.0142) (0.0141)
------------------------------------
N 10000.0000 10000.0000
ll -247.7733 -247.7733
------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001
参考资料
Cameron, A. C., & Trivedi, P. K. (2009). Microeconometrics Using Stata.
Cameron, A. C., & Trivedi, P. K. (2010). Microeconometrics : methods and applications. Economic Journal, 116(509), F161-F162.
Gould, W. W., Pitblado, J., & Poi, B. (2010). Maximum Likelihood Estimation with Stata.
边文龙, & 王向楠. (2016). 面板数据随机前沿分析的研究综述. 统计研究, 33(6), 13-20.
连玉君. (2018). 随机边界模型:进展及stata应用. 郑州航空工业管理学院学报, 36(1), 97-112.
关于我们
【Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
公众号推文同步发布于 CSDN-Stata连享会 、简书-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词
Stata
或Stata连享会
后关注我们。点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
Stata连享会 精彩推文1 || 精彩推文2
联系我们
欢迎赐稿: 欢迎将您的文章或笔记投稿至
Stata连享会(公众号: StataChina)
,我们会保留您的署名;录用稿件达五篇
以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
联系邮件: StataChina@163.com
往期精彩推文